package com.zjl.config;

import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig extends CachingConfigurerSupport {

    /**
     * 创建RedisTemplate bean，用于操作Redis数据库。
     * RedisTemplate是一个抽象层，它允许自定义序列化器和其他选项，以适应不同的使用场景。
     *
     * @param connectionFactory Redis连接工厂，用于创建Redis连接。
     *                          RedisTemplate通过这个参数与Redis服务器建立连接。
     * @return 返回配置好的RedisTemplate实例，可用于存储和检索键值对数据。
     */
    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
        // 设置键的序列化方式为StringRedisSerializer，确保键的序列化和反序列化一致性。
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        // 配置RedisTemplate使用的ConnectionFactory，完成与Redis服务器的连接。
        redisTemplate.setConnectionFactory(connectionFactory);
        return redisTemplate;
    }

}
